package club.xyes.zkh.ecommerce.service;

import club.xyes.zkh.ecommerce.commons.entity.User;

import java.io.IOException;
import java.util.List;

/**
 * Create by 郭文梁 2019/4/15 0015 15:21
 * UserService
 * 用户业务服务组件行为定义
 *
 * @author 郭文梁
 * @data 2019/4/15 0015
 */
public interface UserService extends BaseService<User> {
    /**
     * 通过微信小程序获得的code登录用户
     *
     * @param code 临时code
     * @return 用户信息
     */
    User loginByMicroProgramCode(String code);

    /**
     * 通过OpenId登录
     *
     * @param openId     openId
     * @param sessionKey 会话SessionKey
     * @return 用户信息
     */
    User loginByOpenId(String openId, String sessionKey);

    /**
     * 通过OpenId查找用户
     *
     * @param openId OpenId
     * @return 用户对象
     */
    User findByOpenId(String openId);

    /**
     * 通过OpenId完善用户的信息
     *
     * @param openid openId
     * @param avatar 头像地址
     * @param name   用户名
     * @return User
     */
    User complementByOpenId(String openid, String avatar, String name);

    /**
     * 解密微信用户信息，设置用户手机号
     *
     * @param user 用户
     * @param iv   初始向量
     * @param data 加密数据
     * @return 用户信息
     */
    User setMobile(User user, String iv, String data);

    /**
     * 绑定公众号OpenId
     *
     * @param user 用户
     * @param code oauth2 code
     * @return 用户
     * @throws IOException IO异常
     */
    User bindOauthOpenId(User user, String code) throws IOException;

    /**
     * 通过ID列表查询
     *
     * @param userIdList id列表
     * @return 用户列表
     */
    List<User> findByIds(List<Integer> userIdList);
}
